#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import jsonify, request
from flask_restful import Resource
from utility.odoo_manager import OdooManager  # 操作odoo的单例
from utility.error_code import error_code  # 异常代码
from utility.message_manager import MessageBusManager
from datetime import datetime, timedelta
from event import event_type
import logging
from utility import tools
from utility.tools import is_checking, nullablea_dict, parse_M2M_params, parase_yz, check_physical, check_progress, \
    update_archives

FORMAT = "%(asctime)s %(thread)d %(message)s"
logging.basicConfig(level=logging.INFO, format=FORMAT)


class CjArchivesNewAPI(Resource):
    """
    新增初检问询档案
    :request: post
    :param archivesId: 档案ID
    :param bcrsqk: 本次妊娠情况
            {
                "rsqkMcyjss": 末次月经时间
                "rsqkYcq": 预产期
                "rsqkYzWeek": 孕周-周
                "rsqkYzDay": 孕周-天
                "rsqkSfjzyz": 是否矫正孕周
                "rsqkJzycq": 矫正预产期
                "rsqkJzyzWeek": 矫正孕周-周
                "rsqkJzyzDay": 矫正孕周-天
                "rsqkYqszfyys": 孕前三周是否服用叶酸
                "rsqkRsteqk": 妊娠胎儿情况
                "rsqkIvfet": IVF_ET体外受精
                "rsqkPtzrsj": 胚胎植入时间
            }
    :param ybzz: 一般症状
            {
                "ybzzYjdzhx": 夜间端坐呼吸
                "ybzzKs": 咳嗽
                "ybzzEx": 恶心
                "ybzzFl": 乏力
                "ybzzSfbbs": 上腹部不适
                "ybzzNxgnyc": 凝血功能异常
                "ybzzOt": 呕吐
                "ybzzFg": 发绀
                "ybzzXs": 消瘦
                "ybzzXxbjs": 血小板减少
                "ybzzGzmxyc": 肝脏酶学异常
                "ybzzCh": 出汗
                "ybzzYt": 眼突
                "ybzzDxt": 低血糖
                "ybzzSszc": 双手震颤
                "ybzzXm": 胸闷
                "ybzzFz": 浮肿
                "ybzzHd": 黄疸
                "ybzzXj": 心悸
            }
    :param yjs: 月经史
            {
                "yjsCcnl": 初潮年龄岁
                "yjsYjbgl": 月经不规律
                "yjsYjl": 月经量
                "yjsTjcd": 痛经程度
                "yjsCxsj": 持续时间 天
                "yjsYjzq": 月经周期 天
                "yjsJj": 绝经
            }
    :param fksss: 妇科手术史
            {
                "fksssYwfksss": 有无妇科手术室
                "fksssYwfksssDx": [
                    {
                        "code": 编码
                        "name": 手术名
                    }
                ],
                "fksssYwfksssQt": 其他
            }  
    :param ycs: 孕产史 
            {
                "ycsYwycs": 有无孕产史
                "ycsYc": 孕次
                "ycsCc": 产次
                "ycsYdcc": 阴道产次
                "ycsPgcc": 刨宫产次
                "ycsYcrss": 异常妊娠史
                    [
                        {
                            "code": 编码
                            "name": 异常妊娠史名字
                        }
                    ]
                "ycsYcrssQt": 异常妊娠史-其他
                "ycsMclc": 末次流产
                "ycsMclcsj": 末次流产时间
                "ycsBz": 备注
                "ycsJwcsqx": 既往出生缺陷
                    [
                        {
                            "code": code
                            "name": 既往出生缺陷名字
                        }
                    ]
                "ycsJwcsqxQt": 既往出生缺陷-其他
                "ycsJwrszRadio": 既往妊娠合并症、并发症-是/否
                "ycsJwrszCheck": 既往妊娠合并症、并发症
                    [
                        {
                            "code": code
                            "name": 名字
                        }
                    ]
                "ycsJwrszInput": 既往妊娠合并症、并发症其他
            }      
    :param yws: 药物史    
            [
                {
                    "ywsRq": 药物史-日期
                    "ywsYm": 药物史-药名
                }
            ]
    :param grs: 个人史   
            {
                "grsJcwlxyhys": 接触物理性有害因素
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ],
                "grsJcwlxyhysQt": 接触物理性有害因素其他
                "grsJcgndgydw": 接触高浓度工业毒物
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ],
                "grsJcgndgydwQt": 接触高浓度工业毒物-其他
                "grsJycw": 家养宠物
                "grsHjxzx": 环境新装修
                "grsYjs": 饮酒史
                "grsYjsL": 饮酒史-量
                "grsXy": 吸烟
                "grsXyYl": 吸烟-烟龄
                "grsXyMtpj": 吸烟-每天平均
                "grsXd": 吸毒
            }
    :param crbs: 传染病史
            {
                "crbsFz": 风疹
                "crbsFzymjz": 风疹疫苗接种 岁预防接种
                "crbsMz": 麻疹
                "crbsMzymjz": 麻疹疫苗接种 岁预防接种
                "crbsSd": 水痘
            }
    :param jzycs: 家族及遗传病史
            {
                "jzycJqjh": 家族近亲结婚史
                "jzycJqhp": 家族近亲婚配者与本人关系
                "jzycJzsmx": 家族史母系
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ]
                "jzycJzsmxText": 家族史母系其他
                "jzycJzsfx": 家族史父系
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ]
                "jzycJzsfxText": 家族史父系-其它文本
            }
    :param jws: 既往史
            {
                "jwsJws": 既往史
                    [
                        [
                            "string"
                        ]
                    ]
                "jwsJwsText": 既往史其他
            }
    :param cjjgBm: 初检机构编码
    :param cjsj: 初检时间
    :param cjysBm: 初检医生编码
    :returns: json string
    """
    def post(self):
        try:
            
            odoo = OdooManager().get_instance()
            params = tools.get_params(request)
            # 参数校验
            req_params = ['archivesId']
            vrf_res = tools.required_parame_verif(req_params,params)
            if  vrf_res['code'] != 0:
                return jsonify(vrf_res)
            # 检查在途情况
            check_res = is_checking(params.get("archivesId"), '1')
            if not check_res['res']:
                return jsonify({
                    'code': 1,
                    'msg': check_res['msg'],
                    'data': None
                })
            progress_data = check_progress(params.get('archivesId'), '1')
            if not progress_data['data']:
                return jsonify({
                    'msg': progress_data['msg'],
                    'code': 1
                })
            # 创建初检问询档案
            data_ = {
                #'inspection_log_id': '',
                'archives_id': params.get('archivesId'),
                # 孕周
                'rsqk_yz': parase_yz(0, nullablea_dict(params.get('bcrsqk'), 'rsqkYzWeek'), nullablea_dict(params.get('bcrsqk'), 'rsqkYzDay')),
                # 矫正孕周
                'rsqk_sfjzyz': nullablea_dict(params.get('bcrsqk'), 'rsqkSfjzyz'),
                # # 矫正预产期
                # 'rsqk_jzycq': nullablea_dict(params.get('bcrsqk'), 'rsqkJzycq'),
                # 矫正孕周
                'rsqk_jzyz': parase_yz(0, nullablea_dict(params.get('bcrsqk'), 'rsqkJzyzWeek'),
                                         nullablea_dict(params.get('bcrsqk'), 'rsqkJzyzDay')),
                # 本次妊娠情况-孕前三周是否服用叶酸
                'rsqk_yqszfyys': nullablea_dict(params.get('bcrsqk'), 'rsqkYqszfyys'),
                # 本次妊娠情况-IVF_ET体外受精
                'rsqk_ivfet': nullablea_dict(params.get('bcrsqk'), 'rsqkIvfet'),
                # 本次妊娠情况-妊娠胎儿情况(字典)
                'rsqk_rsteqk': nullablea_dict(params.get('bcrsqk'), 'rsqkRsteqk'),
                # 一般症状
                'ybzz_yjdzhx': nullablea_dict(params.get('ybzz'), 'ybzzYjdzhx'),
                'ybzz_ks': nullablea_dict(params.get('ybzz'), 'ybzzKs'),
                'ybzz_ex': nullablea_dict(params.get('ybzz'), 'ybzzEx'),
                'ybzz_fl': nullablea_dict(params.get('ybzz'), 'ybzzFl'),
                'ybzz_sfbbs': nullablea_dict(params.get('ybzz'), 'ybzzSfbbs'),
                'ybzz_nxgnyc': nullablea_dict(params.get('ybzz'), 'ybzzNxgnyc'),
                'ybzz_ot': nullablea_dict(params.get('ybzz'), 'ybzzOt'),
                'ybzz_fg': nullablea_dict(params.get('ybzz'), 'ybzzFg'),
                'ybzz_xs': nullablea_dict(params.get('ybzz'), 'ybzzXs'),
                'ybzz_xxbjs': nullablea_dict(params.get('ybzz'), 'ybzzXxbjs'),
                'ybzz_gzmxyc': nullablea_dict(params.get('ybzz'), 'ybzzGzmxyc'),
                'ybzz_ch': nullablea_dict(params.get('ybzz'), 'ybzzCh'),
                'ybzz_yt': nullablea_dict(params.get('ybzz'), 'ybzzYt'),
                'ybzz_dxt': nullablea_dict(params.get('ybzz'), 'ybzzDxt'),
                'ybzz_sszc': nullablea_dict(params.get('ybzz'), 'ybzzSszc'),
                'ybzz_xm': nullablea_dict(params.get('ybzz'), 'ybzzXm'),
                'ybzz_fz': nullablea_dict(params.get('ybzz'), 'ybzzFz'),
                'ybzz_hd': nullablea_dict(params.get('ybzz'), 'ybzzHd'),
                'ybzz_xj': nullablea_dict(params.get('ybzz'), 'ybzzXj'),
                # 月经史
                'yjs_ccnl': nullablea_dict(params.get('yjs'), 'yjsCcnl'),
                'yjs_yjbgl': nullablea_dict(params.get('yjs'), 'yjsYjbgl'),
                'yjs_yjl': nullablea_dict(params.get('yjs'), 'yjsYjl'),
                'yjs_tjcd': nullablea_dict(params.get('yjs'), 'yjsTjcd'),
                'yjs_cxsj': nullablea_dict(params.get('yjs'), 'yjsCxsj'),
                'yjs_yjzq': nullablea_dict(params.get('yjs'), 'yjsYjzq'),
                'yjs_jj': nullablea_dict(params.get('yjs'), 'yjsJj'),
                # 妇科手术史
                'fksss_ywfksss': nullablea_dict(params.get('fksss'), 'fksssYwfksss'),
                'fksss_ywfksss_dx': parse_M2M_params(nullablea_dict(params.get('fksss'), 'fksssYwfksssDx')),
                'fksss_ywfksss_qt': nullablea_dict(params.get('fksss'), 'fksssYwfksssQt'),
                # 孕产史
                # 有无
                'ycs_ywycs': nullablea_dict(params.get('ycs'), 'ycsYwycs'),
                # 孕次
                'ycs_yc': nullablea_dict(params.get('ycs'), 'ycsYc'),
                # 产次
                'ycs_cc': nullablea_dict(params.get('ycs'), 'ycsCc'),
                # 阴道产次
                'ycs_ydcc': nullablea_dict(params.get('ycs'), 'ycsYdcc'),
                # 刨宫产次
                'ycs_pgcc': nullablea_dict(params.get('ycs'), 'ycsPgcc'),
                # 孕产史-异常妊娠史(字典)
                'ycs_ycrss': parse_M2M_params(nullablea_dict(params.get('ycs'), 'ycsYcrss')),
                # 孕产史-异常妊娠史(其他)
                'ycs_ycrss_qt': nullablea_dict(params.get('ycs'), 'ycsYcrssQt'),
                # 末次流产有无
                'ycs_mclc': nullablea_dict(params.get('ycs'), 'ycsMclc'),
                # 末次流产备注
                'ycs_bz': nullablea_dict(params.get('ycs'), 'ycsBz'),
                # 出生缺陷
                'ycs_jwcsqx': parse_M2M_params(nullablea_dict(params.get('ycs'), 'ycsJwcsqx')),
                # 出生缺陷其他
                'ycs_jwcsqx_qt': nullablea_dict(params.get('ycs'), 'ycsJwcsqxQt'),
                # 孕产史-既往妊娠合并症、并发症(字典)
                'ycs_jwrsz_check': parse_M2M_params(nullablea_dict(params.get('ycs'), 'ycsJwrszCheck')),
                # 孕产史-既往妊娠合并症、并发症-是/否
                'ycs_jwrsz_radio': nullablea_dict(params.get('ycs'), 'ycsJwrszRadio'),
                # 孕产史 - 既往妊娠合并症、并发症 - 其他
                'ycs_jwrsz_input': nullablea_dict(params.get('ycs'), 'ycsJwrszInput'),
                'grs_jcwlxyhys': parse_M2M_params(nullablea_dict(params.get('grs'), 'grsJcwlxyhys')),
                'grs_jcwlxyhys_qt': nullablea_dict(params.get('grs'), 'grsJcwlxyhysQt'),
                'grs_jcgndgydw': parse_M2M_params(nullablea_dict(params.get('grs'), 'grsJcgndgydw')),
                'grs_jcgndgydw_qt': nullablea_dict(params.get('grs'), 'grsJcgndgydwQt'),
                'grs_jycw': nullablea_dict(params.get('grs'), 'grsJycw'),
                'grs_hjxzx': nullablea_dict(params.get('grs'), 'grsHjxzx'),
                'grs_yjs': nullablea_dict(params.get('grs'), 'grsYjs'),
                'grs_yjs_l': nullablea_dict(params.get('grs'), 'grsYjsL'),
                'grs_xy': nullablea_dict(params.get('grs'), 'grsXy'),
                'grs_xy_yl': nullablea_dict(params.get('grs'), 'grsXyYl'),
                'grs_xy_mtpj': nullablea_dict(params.get('grs'), 'grsXyMtpj'),
                'grs_xd': nullablea_dict(params.get('grs'), 'grsXd'),
                'crbs_fz': nullablea_dict(params.get('crbs'), 'crbsFz'),
                'crbs_fzymjz': nullablea_dict(params.get('crbs'), 'crbsFzymjz'),
                'crbs_mz': nullablea_dict(params.get('crbs'), 'crbsMz'),
                'crbs_mzymjz': nullablea_dict(params.get('crbs'), 'crbsMzymjz'),
                'crbs_sd': nullablea_dict(params.get('crbs'), 'crbsSd'),
                'jzyc_jqjh': nullablea_dict(params.get('jzycs'), 'jzycJqjh'),
                'jzyc_jqhp': nullablea_dict(params.get('jzycs'), 'jzycJqhp'),
                'jzyc_jzsmx': parse_M2M_params(nullablea_dict(params.get('jzycs'), 'jzycJzsmx')),
                'jzyc_jzsmx_text': nullablea_dict(params.get('jzycs'), 'jzycJzsmxText'),
                'jzyc_jzsfx': parse_M2M_params(nullablea_dict(params.get('jzycs'), 'jzycJzsfx')),
                'jzyc_jzsfx_text': nullablea_dict(params.get('jzycs'), 'jzycJzsfxText'),
                'jws_jws': parse_M2M_params(nullablea_dict(params.get('jws'), 'jwsJws')),
                'jws_jws_text': nullablea_dict(params.get('jws'), 'jwsJwsText'),
                'jbxx_jcjg': params.get('cjjgBm'),
                'jws_cjys': params.get('cjysBm')
            }
            # 矫正预产期
            if nullablea_dict(params.get('bcrsqk'), 'rsqkJzycq'):
                data_['rsqk_jzycq'] = nullablea_dict(params.get('bcrsqk'), 'rsqkJzycq')
            if nullablea_dict(params.get('bcrsqk'), 'rsqkMcyjss'):
                data_['rsqk_mcyjss'] = nullablea_dict(params.get('bcrsqk'), 'rsqkMcyjss')
            if nullablea_dict(params.get('bcrsqk'), 'rsqkYcq'):
                data_['rsqk_ycq'] = nullablea_dict(params.get('bcrsqk'), 'rsqkYcq')
            if nullablea_dict(params.get('bcrsqk'), 'rsqkPtzrsj'):
                data_['rsqk_ptzrsj'] = nullablea_dict(params.get('bcrsqk'), 'rsqkPtzrsj')
            if params.get('cjsj'):
                data_['jws_jcsj'] = params.get('cjsj')
            if nullablea_dict(params.get('ycs'), 'ycsMclcsj'):
                data_['ycs_mclcsj'] = nullablea_dict(params.get('ycs'), 'ycsMclcsj')

            main_id = odoo.env['inspection.initial'].create(data_)
            # 创建初检问询档案药物史
            if params.get('yws'):
                for yws_ in  params.get('yws'):
                    yws_data_ = {
                        'pid': main_id,
                        'yws_ym': yws_['ywsYm'],
                        'yws_rq': yws_['ywsRq'],
                        'hospital_id': 1
                    }
                    yws_data_ = odoo.env['inspection.initial.yw'].create(yws_data_)
            create_event = event_type.OperationLogEvent('初检问询档案', '档案id:{}'.format(params.get('archivesId')))
            message_bus = MessageBusManager().get_message_bus()
            message_bus.handle(create_event)  # 发布事件
            logId = None
            # 当有在途log时
            if (check_res['logId']):
                logId = check_res['logId']
                # 更新log表
                odoo.env['inspection.log'].write(logId, {
                    'cjda_id': main_id
                })
                create_event = event_type.OperationLogEvent('更新log记录','logid:{},cjda_id{}'.format(logId,
                                                                                       main_id))
                message_bus = MessageBusManager().get_message_bus()
                message_bus.handle(create_event)  # 发布事件
            else:
                # 创建检查记录
                check_data_ = {
                    'archives_id': params.get('archivesId'),
                    'type': '1',
                    'cjda_id': main_id,
                    'state': '0'
                }
                logId = odoo.env['inspection.log'].create(check_data_)
                create_event = event_type.OperationLogEvent('创建检查记录','档案id:{},cjda_id{}'.format(params.get('archivesId'),main_id))
                message_bus = MessageBusManager().get_message_bus()
                message_bus.handle(create_event)  # 发布事件
            # 更新初检表logid
            u_data_ = {'inspection_log_id': logId}
            odoo.env['inspection.initial'].write(main_id,u_data_)
            # 更新孕周
            update_archives(int(params.get('archivesId')), {
                "yz": parase_yz(0, nullablea_dict(params.get('bcrsqk'), 'rsqkYzWeek'), nullablea_dict(params.get('bcrsqk'), 'rsqkYzDay'))
            })
            # 处理体格检查
            check_physical(int(params.get('archivesId')), '1')
            return jsonify({'code': 0, 'msg': 'success', 'data': {'logId': logId, 'id': main_id}, 'success': True})
        except AttributeError as e:
            logging.exception(e)
            return jsonify({'code': 404, 'msg': error_code[404]})
        except Exception as e:
            logging.exception(e)
            return jsonify({'code': 100, 'msg': error_code[100]})

class CjArchivesUpdateAPI(Resource):
    """
    更新初检问询档案
    :request: put
    :param archivesId: 档案ID
    :param logId: 检查表ID
    :param bcrsqk: 本次妊娠情况
            {
                "rsqkMcyjss": 末次月经时间
                "rsqkYcq": 预产期
                "rsqkYzWeek": 孕周-周
                "rsqkYzDay": 孕周-天
                "rsqkSfjzyz": 是否矫正孕周
                "rsqkJzycq": 矫正预产期
                "rsqkJzyzWeek": 矫正孕周-周
                "rsqkJzyzDay": 矫正孕周-天
                "rsqkYqszfyys": 孕前三周是否服用叶酸
                "rsqkRsteqk": 妊娠胎儿情况
                "rsqkIvfet": IVF_ET体外受精
                "rsqkPtzrsj": 胚胎植入时间
            }
    :param ybzz: 一般症状
            {
                "ybzzYjdzhx": 夜间端坐呼吸
                "ybzzKs": 咳嗽
                "ybzzEx": 恶心
                "ybzzFl": 乏力
                "ybzzSfbbs": 上腹部不适
                "ybzzNxgnyc": 凝血功能异常
                "ybzzOt": 呕吐
                "ybzzFg": 发绀
                "ybzzXs": 消瘦
                "ybzzXxbjs": 血小板减少
                "ybzzGzmxyc": 肝脏酶学异常
                "ybzzCh": 出汗
                "ybzzYt": 眼突
                "ybzzDxt": 低血糖
                "ybzzSszc": 双手震颤
                "ybzzXm": 胸闷
                "ybzzFz": 浮肿
                "ybzzHd": 黄疸
                "ybzzXj": 心悸
            }
    :param yjs: 月经史
            {
                "yjsCcnl": 初潮年龄岁
                "yjsYjbgl": 月经不规律
                "yjsYjl": 月经量
                "yjsTjcd": 痛经程度
                "yjsCxsj": 持续时间 天
                "yjsYjzq": 月经周期 天
                "yjsJj": 绝经
            }
    :param fksss: 妇科手术史
            {
                "fksssYwfksss": 有无妇科手术室
                "fksssYwfksssDx": [
                    {
                        "code": 编码
                        "name": 手术名
                    }
                ],
                "fksssYwfksssQt": 其他
            }  
    :param ycs: 孕产史 
            {
                "ycsYwycs": 有无孕产史
                "ycsYc": 孕次
                "ycsCc": 产次
                "ycsYdcc": 阴道产次
                "ycsPgcc": 刨宫产次
                "ycsYcrss": 异常妊娠史
                    [
                        {
                            "code": 编码
                            "name": 异常妊娠史名字
                        }
                    ]
                "ycsYcrssQt": 异常妊娠史-其他
                "ycsMclc": 末次流产
                "ycsMclcsj": 末次流产时间
                "ycsBz": 备注
                "ycsJwcsqx": 既往出生缺陷
                    [
                        {
                            "code": code
                            "name": 既往出生缺陷名字
                        }
                    ]
                "ycsJwcsqxQt": 既往出生缺陷-其他
                "ycsJwrszRadio": 既往妊娠合并症、并发症-是/否
                "ycsJwrszCheck": 既往妊娠合并症、并发症
                    [
                        {
                            "code": code
                            "name": 名字
                        }
                    ]
                "ycsJwrszInput": 既往妊娠合并症、并发症其他
            }      
    :param yws: 药物史    
            [
                {
                    "ywsRq": 药物史-日期
                    "ywsYm": 药物史-药名
                }
            ]
    :param grs: 个人史   
            {
                "grsJcwlxyhys": 接触物理性有害因素
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ],
                "grsJcwlxyhysQt": 接触物理性有害因素其他
                "grsJcgndgydw": 接触高浓度工业毒物
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ],
                "grsJcgndgydwQt": 接触高浓度工业毒物-其他
                "grsJycw": 家养宠物
                "grsHjxzx": 环境新装修
                "grsYjs": 饮酒史
                "grsYjsL": 饮酒史-量
                "grsXy": 吸烟
                "grsXyYl": 吸烟-烟龄
                "grsXyMtpj": 吸烟-每天平均
                "grsXd": 吸毒
            }
    :param crbs: 传染病史
            {
                "crbsFz": 风疹
                "crbsFzymjz": 风疹疫苗接种 岁预防接种
                "crbsMz": 麻疹
                "crbsMzymjz": 麻疹疫苗接种 岁预防接种
                "crbsSd": 水痘
            }
    :param jzycs: 家族及遗传病史
            {
                "jzycJqjh": 家族近亲结婚史
                "jzycJqhp": 家族近亲婚配者与本人关系
                "jzycJzsmx": 家族史母系
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ]
                "jzycJzsmxText": 家族史母系其他
                "jzycJzsfx": 家族史父系
                    [
                        {
                            "code": 编码
                            "name": 名称
                        }
                    ]
                "jzycJzsfxText": 家族史父系-其它文本
            }
    :param jws: 既往史
            {
                "jwsJws": 既往史
                    [
                        [
                            "string"
                        ]
                    ]
                "jwsJwsText": 既往史其他
            }
    :param cjjgBm: 初检机构编码
    :param cjsj: 初检时间
    :param cjysBm: 初检医生编码
    :returns: json string
    """

    def put(self):
        try:
            odoo = OdooManager().get_instance()
            params = request.json
            # 参数校验
            req_params = ['archivesId','logId']
            vrf_res = tools.required_parame_verif(req_params,params)
            if  vrf_res['code'] != 0:
                return jsonify(vrf_res)
            check_res = is_checking(params.get("archivesId"), '1')
            if not check_res['res'] and not params.get('history'):
                return jsonify({
                    'code': 1,
                    'msg': check_res['msg'],
                    'data': None
                })
            query_ = [
                ('archives_id', '=', int(params.get('archivesId'))),
                ('inspection_log_id', '=', int(params.get('logId')))
            ]
            inspection_initial = odoo.env['inspection.initial'].search(query_)
            if not inspection_initial:
                return jsonify({'code': 40005, 'msg': error_code[40005]})
            data_={
                'inspection_log_id':  int(params.get('logId')),
                'archives_id': int(params.get('archivesId')),
                # 孕周
                'rsqk_yz': parase_yz(0, nullablea_dict(params.get('bcrsqk'), 'rsqkYzWeek'), nullablea_dict(params.get('bcrsqk'), 'rsqkYzDay')),
                # 矫正孕周
                'rsqk_sfjzyz': nullablea_dict(params.get('bcrsqk'), 'rsqkSfjzyz'),
                # 矫正预产期
                'rsqk_jzycq': nullablea_dict(params.get('bcrsqk'), 'rsqkJzycq'),
                # 矫正孕周
                'rsqk_jzyz': parase_yz(0, nullablea_dict(params.get('bcrsqk'), 'rsqkJzyzWeek'), nullablea_dict(params.get('bcrsqk'), 'rsqkJzyzDay')),
                # 本次妊娠情况-孕前三周是否服用叶酸
                'rsqk_yqszfyys': nullablea_dict(params.get('bcrsqk'), 'rsqkYqszfyys'),
                # 本次妊娠情况-IVF_ET体外受精
                'rsqk_ivfet': nullablea_dict(params.get('bcrsqk'), 'rsqkIvfet'),
                # 本次妊娠情况-妊娠胎儿情况(字典)
                'rsqk_rsteqk': nullablea_dict(params.get('bcrsqk'), 'rsqkRsteqk'),
                # 一般症状
                'ybzz_yjdzhx': nullablea_dict(params.get('ybzz'), 'ybzzYjdzhx'),
                'ybzz_ks': nullablea_dict(params.get('ybzz'), 'ybzzKs'),
                'ybzz_ex': nullablea_dict(params.get('ybzz'), 'ybzzEx'),
                'ybzz_fl': nullablea_dict(params.get('ybzz'), 'ybzzFl'),
                'ybzz_sfbbs': nullablea_dict(params.get('ybzz'), 'ybzzSfbbs'),
                'ybzz_nxgnyc': nullablea_dict(params.get('ybzz'), 'ybzzNxgnyc'),
                'ybzz_ot': nullablea_dict(params.get('ybzz'), 'ybzzOt'),
                'ybzz_fg': nullablea_dict(params.get('ybzz'), 'ybzzFg'),
                'ybzz_xs': nullablea_dict(params.get('ybzz'), 'ybzzXs'),
                'ybzz_xxbjs': nullablea_dict(params.get('ybzz'), 'ybzzXxbjs'),
                'ybzz_gzmxyc': nullablea_dict(params.get('ybzz'), 'ybzzGzmxyc'),
                'ybzz_ch': nullablea_dict(params.get('ybzz'), 'ybzzCh'),
                'ybzz_yt': nullablea_dict(params.get('ybzz'), 'ybzzYt'),
                'ybzz_dxt': nullablea_dict(params.get('ybzz'), 'ybzzDxt'),
                'ybzz_sszc': nullablea_dict(params.get('ybzz'), 'ybzzSszc'),
                'ybzz_xm': nullablea_dict(params.get('ybzz'), 'ybzzXm'),
                'ybzz_fz': nullablea_dict(params.get('ybzz'), 'ybzzFz'),
                'ybzz_hd': nullablea_dict(params.get('ybzz'), 'ybzzHd'),
                'ybzz_xj': nullablea_dict(params.get('ybzz'), 'ybzzXj'),
                # 月经史
                'yjs_ccnl': nullablea_dict(params.get('yjs'), 'yjsCcnl'),
                'yjs_yjbgl': nullablea_dict(params.get('yjs'), 'yjsYjbgl'),
                'yjs_yjl': nullablea_dict(params.get('yjs'), 'yjsYjl'),
                'yjs_tjcd': nullablea_dict(params.get('yjs'), 'yjsTjcd'),
                'yjs_cxsj': nullablea_dict(params.get('yjs'), 'yjsCxsj'),
                'yjs_yjzq': nullablea_dict(params.get('yjs'), 'yjsYjzq'),
                'yjs_jj': nullablea_dict(params.get('yjs'), 'yjsJj'),
                # 妇科手术史
                'fksss_ywfksss': nullablea_dict(params.get('fksss'), 'fksssYwfksss'),
                'fksss_ywfksss_dx': [(6, 0, nullablea_dict(params.get('fksss'), 'fksssYwfksssDx'))],
                'fksss_ywfksss_qt': nullablea_dict(params.get('fksss'), 'fksssYwfksssQt'),
                # 孕产史
                # 有无
                'ycs_ywycs': nullablea_dict(params.get('ycs'), 'ycsYwycs'),
                # 孕次
                'ycs_yc': nullablea_dict(params.get('ycs'), 'ycsYc'),
                # 产次
                'ycs_cc': nullablea_dict(params.get('ycs'), 'ycsCc'),
                # 阴道产次
                'ycs_ydcc': nullablea_dict(params.get('ycs'), 'ycsYdcc'),
                # 刨宫产次
                'ycs_pgcc': nullablea_dict(params.get('ycs'), 'ycsPgcc'),
                # 孕产史-异常妊娠史(字典)
                'ycs_ycrss': [(6, 0, nullablea_dict(params.get('ycs'), 'ycsYcrss'))],
                # 孕产史-异常妊娠史(其他)
                'ycs_ycrss_qt': nullablea_dict(params.get('ycs'), 'ycsYcrssQt'),
                # 末次流产有无
                'ycs_mclc': nullablea_dict(params.get('ycs'), 'ycsMclc'),
                # 末次流产备注
                'ycs_bz': nullablea_dict(params.get('ycs'), 'ycsBz'),
                # 出生缺陷
                'ycs_jwcsqx': [(6, 0, nullablea_dict(params.get('ycs'), 'ycsJwcsqx'))],
                # 出生缺陷其他
                'ycs_jwcsqx_qt': nullablea_dict(params.get('ycs'), 'ycsJwcsqxQt'),
                # 孕产史-既往妊娠合并症、并发症(字典)
                'ycs_jwrsz_check': [(6, 0, nullablea_dict(params.get('ycs'), 'ycsJwrszCheck'))],
                # 孕产史-既往妊娠合并症、并发症-是/否
                'ycs_jwrsz_radio': nullablea_dict(params.get('ycs'), 'ycsJwrszRadio'),
                # 孕产史 - 既往妊娠合并症、并发症 - 其他
                'ycs_jwrsz_input': nullablea_dict(params.get('ycs'), 'ycsJwrszInput'),
                'grs_jcwlxyhys': [(6, 0, nullablea_dict(params.get('grs'), 'grsJcwlxyhys') or [])],
                'grs_jcwlxyhys_qt': nullablea_dict(params.get('grs'), 'grsJcwlxyhysQt'),
                'grs_jcgndgydw': [(6, 0, nullablea_dict(params.get('grs'), 'grsJcgndgydw') or [])],
                'grs_jcgndgydw_qt': nullablea_dict(params.get('grs'), 'grsJcgndgydwQt'),
                'grs_jycw': nullablea_dict(params.get('grs'), 'grsJycw'),
                'grs_hjxzx': nullablea_dict(params.get('grs'), 'grsHjxzx'),
                'grs_yjs': nullablea_dict(params.get('grs'), 'grsYjs'),
                'grs_yjs_l': nullablea_dict(params.get('grs'), 'grsYjsL'),
                'grs_xy': nullablea_dict(params.get('grs'), 'grsXy'),
                'grs_xy_yl': nullablea_dict(params.get('grs'), 'grsXyYl'),
                'grs_xy_mtpj': nullablea_dict(params.get('grs'), 'grsXyMtpj'),
                'grs_xd': nullablea_dict(params.get('grs'), 'grsXd'),
                'crbs_fz': nullablea_dict(params.get('crbs'), 'crbsFz'),
                'crbs_fzymjz': nullablea_dict(params.get('crbs'), 'crbsFzymjz'),
                'crbs_mz': nullablea_dict(params.get('crbs'), 'crbsMz'),
                'crbs_mzymjz': nullablea_dict(params.get('crbs'), 'crbsMzymjz'),
                'crbs_sd': nullablea_dict(params.get('crbs'), 'crbsSd'),
                'jzyc_jqjh': nullablea_dict(params.get('jzycs'), 'jzycJqjh'),
                'jzyc_jqhp': nullablea_dict(params.get('jzycs'), 'jzycJqhp'),
                'jzyc_jzsmx': [(6, 0, nullablea_dict(params.get('jzycs'), 'jzycJzsmx'))],
                'jzyc_jzsmx_text': nullablea_dict(params.get('jzycs'), 'jzycJzsmxText'),
                'jzyc_jzsfx': [(6, 0, nullablea_dict(params.get('jzycs'), 'jzycJzsfx'))],
                'jzyc_jzsfx_text': nullablea_dict(params.get('jzycs'), 'jzycJzsfxText'),
                'jws_jws': [(6, 0, nullablea_dict(params.get('jws'), 'jwsJws'))],
                'jws_jws_text': nullablea_dict(params.get('jws'), 'jwsJwsText'),
                'jbxx_jcjg': params.get('cjjgBm'),
                'jws_cjys': params.get('cjysBm')
            }
            if nullablea_dict(params.get('bcrsqk'), 'rsqkMcyjss'):
                data_['rsqk_mcyjss'] = nullablea_dict(params.get('bcrsqk'), 'rsqkMcyjss')
            if nullablea_dict(params.get('bcrsqk'), 'rsqkYcq'):
                data_['rsqk_ycq'] = nullablea_dict(params.get('bcrsqk'), 'rsqkYcq')
            if nullablea_dict(params.get('bcrsqk'), 'rsqkPtzrsj'):
                data_['rsqk_ptzrsj'] = nullablea_dict(params.get('bcrsqk'), 'rsqkPtzrsj')
            if params.get('cjsj'):
                data_['jws_jcsj'] = params.get('cjsj')
            if nullablea_dict(params.get('ycs'), 'ycsMclcsj'):
                data_['ycs_mclcsj'] = nullablea_dict(params.get('ycs'), 'ycsMclcsj')
            odoo.env['inspection.initial'].write(inspection_initial, data_)
            # 创建初检问询档案药物史
            if params.get('yws'):
                #删除药数据
                query_ = [
                    ('pid', '=', inspection_initial[0]),
                ]
                yws_list = odoo.env['inspection.initial.yw'].search(query_)
                if yws_list:
                    odoo.env['inspection.initial.yw'].unlink(yws_list)
                for yws_ in  params.get('yws'):
                    yws_data_ = {
                        'pid': inspection_initial[0],
                        'yws_ym': yws_['ywsYm'],
                        'yws_rq': yws_['ywsRq'],
                        'hospital_id': 1
                    }
                    odoo.env['inspection.initial.yw'].create(yws_data_)
            create_event = event_type.OperationLogEvent('初检问询档案', '档案id:{}'.format(params.get('archivesId')))
            message_bus = MessageBusManager().get_message_bus()
            message_bus.handle(create_event)  # 发布事件
            update_info = {
                "yz": parase_yz(0, nullablea_dict(params.get('bcrsqk'), 'rsqkYzWeek'),
                                nullablea_dict(params.get('bcrsqk'), 'rsqkYzDay')),
            }
            if not params.get('history'):
                check_physical(int(params.get('archivesId')), '1')
            else:
                update_info['mcyjsj'] = nullablea_dict(params.get('bcrsqk'), 'rsqkMcyjss')
            # 更新孕周
            update_archives(int(params.get('archivesId')), update_info)
            return jsonify({'code': 0, 'msg': 'success', 'data': {'logId': params.get('logId'),'id': inspection_initial[0]}, 'success': True})
        except AttributeError as e:
            logging.exception(e)
            return jsonify({'code': 404, 'msg': error_code[404]})
        except Exception as e:
            logging.exception(e)
            return jsonify({'code': 100, 'msg': error_code[100]})

class CjArchivesQueryByArchivesIdAPI(Resource):
    """
    查询初检问询记录回显及历史
    :request: get
    :param archivesId: 档案ID
    :param logId: 针对历史记录的需要传
    :param type: NULL 不区分 0 在途 1完成
    :returns: json string
    """
    def get(self):
        
        try:
            odoo = OdooManager().get_instance()
            params = request.values
            query_ = []
            if  params.get('archivesId'):
                query_.append(('archives_id', '=', int(params.get('archivesId')))) 
            if  params.get('logId'):
                query_.append(('inspection_log_id', '=', int(params.get('logId'))))  
            if  params.get('logId'):
                c_query_ = [
                    ('state', '=', '1'),
                    ('archives_id', '=',int(params.get('archivesId'))),
                    ('id', '=',int(params.get('logId')))
                ]
                inspection_log = odoo.env['inspection.log'].search_read(c_query_, ['cjda_id'])
                if inspection_log:
                    inspection_log = inspection_log.pop()
                    query_.append(('id', '=', int(inspection_log['cjda_id'][0])))
            else:
                # 查询档案在途的初检档案
                res = odoo.env['inspection.log'].search_read([
                    ('archives_id', '=', int(params.get('archivesId'))),
                    ('state', '=', '0'),
                    ('type', '=', '1')
                ])
                if (res):
                    res = res.pop()
                    if (res['cjda_id']):
                        # 将初检档案Id append到查询条件中去
                        query_.append(('id', '=', int(res['cjda_id'][0])))
                    else:
                        return {
                            'msg': 'success',
                            'code': 0,
                            'data': None
                        }
                else:
                    return {
                        'msg': 'success',
                        'code': 0,
                        'data': None
                    }
            inspection_initial = odoo.env['inspection.initial'].search_read(query_)
            data_ = {}
            if inspection_initial:
                inspection_initial_ = inspection_initial[0]
                data_ = {
                    'bcrsqk': {
                        'rsqkMcyjss': inspection_initial_['rsqk_mcyjss'],
                        'rsqkYcq': inspection_initial_['rsqk_ycq'],
                        'rsqkYzWeek': tools.parase_yz(3, inspection_initial_['rsqk_yz'])[0],
                        'rsqkYzDay': tools.parase_yz(3, inspection_initial_['rsqk_yz'])[1],
                        'rsqkSfjzyz': inspection_initial_['rsqk_sfjzyz'],
                        'rsqkJzycq': inspection_initial_['rsqk_jzycq'],
                        'rsqkJzyzWeek': tools.parase_yz(3, inspection_initial_['rsqk_jzyz'])[0],
                        'rsqkJzyzDay': tools.parase_yz(3, inspection_initial_['rsqk_jzyz'])[1],
                        'rsqkYqszfyys': inspection_initial_['rsqk_yqszfyys'],
                        'rsqkRsteqk': inspection_initial_['rsqk_rsteqk'],
                        'rsqkIvfet': inspection_initial_['rsqk_ivfet'],
                        'rsqkPtzrsj': inspection_initial_['rsqk_ptzrsj'],
                    },
                    'ybzz': {
                        'ybzzYjdzhx': inspection_initial_['ybzz_yjdzhx'],
                        'ybzzKs': inspection_initial_['ybzz_ks'],
                        'ybzzEx': inspection_initial_['ybzz_ex'],
                        'ybzzFl': inspection_initial_['ybzz_fl'],
                        'ybzzSfbbs': inspection_initial_['ybzz_sfbbs'],
                        'ybzzNxgnyc': inspection_initial_['ybzz_nxgnyc'],
                        'ybzzOt': inspection_initial_['ybzz_ot'],
                        'ybzzFg': inspection_initial_['ybzz_fg'],
                        'ybzzXs': inspection_initial_['ybzz_xs'],
                        'ybzzXxbjs': inspection_initial_['ybzz_xxbjs'],
                        'ybzzGzmxyc': inspection_initial_['ybzz_gzmxyc'],
                        'ybzzCh': inspection_initial_['ybzz_ch'],
                        'ybzzYt': inspection_initial_['ybzz_yt'],
                        'ybzzDxt': inspection_initial_['ybzz_dxt'],
                        'ybzzSszc': inspection_initial_['ybzz_sszc'],
                        'ybzzXm': inspection_initial_['ybzz_xm'],
                        'ybzzFz': inspection_initial_['ybzz_fz'],
                        'ybzzHd': inspection_initial_['ybzz_hd'],
                        'ybzzXj': inspection_initial_['ybzz_xj']
                    },
                    'yjs': {
                        'yjsCcnl': inspection_initial_['yjs_ccnl'],
                        'yjsYjbgl': inspection_initial_['yjs_yjbgl'],
                        'yjsYjl': inspection_initial_['yjs_yjl'],
                        'yjsTjcd': inspection_initial_['yjs_tjcd'],
                        'yjsCxsj': inspection_initial_['yjs_cxsj'],
                        'yjsYjzq': inspection_initial_['yjs_yjzq'],
                        'yjsJj': inspection_initial_['yjs_jj']
                    },
                    'fksss': {
                        'fksssYwfksss': inspection_initial_['fksss_ywfksss'],
                        'fksssYwfksssDx': inspection_initial_['fksss_ywfksss_dx'],
                        'fksssYwfksssQt': inspection_initial_['fksss_ywfksss_qt'],
                    },
                    'ycs': {
                        'ycsYwycs': inspection_initial_['ycs_ywycs'],
                        'ycsYc': inspection_initial_['ycs_yc'],
                        'ycsCc': inspection_initial_['ycs_cc'],
                        'ycsYdcc': inspection_initial_['ycs_ydcc'],
                        'ycsPgcc': inspection_initial_['ycs_pgcc'],
                        'ycsYcrss': inspection_initial_['ycs_ycrss'],
                        'ycsYcrssQt': inspection_initial_['ycs_ycrss_qt'],
                        'ycsMclc': inspection_initial_['ycs_mclc'],
                        'ycsMclcsj': inspection_initial_['ycs_mclcsj'],
                        'ycsBz': inspection_initial_['ycs_bz'],
                        'ycsJwcsqx': inspection_initial_['ycs_jwcsqx'],
                        'ycsJwcsqxQt': inspection_initial_['ycs_jwcsqx_qt'],
                        'ycsJwrszRadio': inspection_initial_['ycs_jwrsz_radio'],
                        'ycsJwrszCheck': inspection_initial_['ycs_jwrsz_check'],
                        'ycsJwrszInput': inspection_initial_['ycs_jwrsz_input'],
                    },
                    'yws': [],
                    'grs': {
                        'grsJcwlxyhys': inspection_initial_['grs_jcwlxyhys'],
                        'grsJcwlxyhysQt': inspection_initial_['grs_jcwlxyhys_qt'],
                        'grsJcgndgydw': inspection_initial_['grs_jcgndgydw'],
                        'grsJcgndgydwQt': inspection_initial_['grs_jcgndgydw_qt'],
                        'grsJycw': inspection_initial_['grs_jycw'],
                        'grsHjxzx': inspection_initial_['grs_hjxzx'],
                        'grsYjs': inspection_initial_['grs_yjs'],
                        'grsYjsL': inspection_initial_['grs_yjs_l'],
                        'grsXy': inspection_initial_['grs_xy'],
                        'grsXyYl': inspection_initial_['grs_xy_yl'],
                        'grsXyMtpj': inspection_initial_['grs_xy_mtpj'],
                        'grsXd': inspection_initial_['grs_xd']
                    },
                    'crbs': {
                        'crbsFz': inspection_initial_['crbs_fz'],
                        'crbsFzymjz': inspection_initial_['crbs_fzymjz'],
                        'crbsMz': inspection_initial_['crbs_mz'],
                        'crbsMzymjz': inspection_initial_['crbs_mzymjz'],
                        'crbsSd': inspection_initial_['crbs_sd']
                    },
                    'jzycs': {
                        'jzycJqjh': inspection_initial_['jzyc_jqjh'],
                        'jzycJqhp': inspection_initial_['jzyc_jqhp'],
                        'jzycJzsmx': inspection_initial_['jzyc_jzsmx'],
                        'jzycJzsmxText': inspection_initial_['jzyc_jzsmx_text'],
                        'jzycJzsfx': inspection_initial_['jzyc_jzsfx'],
                        'jzycJzsfxText': inspection_initial_['jzyc_jzsfx_text']
                    },
                    'jws': {
                        'jwsJws': inspection_initial_['jws_jws'],
                        'jwsJwsText': inspection_initial_['jws_jws_text']
                    },
                    'cjjgBm': inspection_initial_['jbxx_jcjg'][0] if inspection_initial_['jbxx_jcjg'] else None,
                    'cjjgName': inspection_initial_['jbxx_jcjg'][1] if inspection_initial_['jbxx_jcjg'] else None,
                    'cjysBm': inspection_initial_['jws_cjys'][0] if inspection_initial_['jws_cjys'] else None,
                    'cjysName': inspection_initial_['jws_cjys'][1] if inspection_initial_['jws_cjys'] else None,
                    'cjsj': inspection_initial_['jws_jcsj'],
                    'logId': inspection_initial_['inspection_log_id'][0]
                }
                #  获取使用药物记录
                query_ = [
                    ('pid', '=', inspection_initial_['id']),
                ]
                inspection_initial_yw = odoo.env['inspection.initial.yw'].search_read(query_)
                if inspection_initial_yw:
                    for yw_ in inspection_initial_yw:
                        data_['yws'].append(
                            {
                                'ywsRq': yw_['yws_rq'],
                                'ywsYm': yw_['yws_ym'],
                            }
                        )
            return jsonify({'code': 0, 'msg': 'success', 'data': data_, 'success': True})
        except AttributeError as e:
            logging.exception(e)
            return jsonify({'code': 404, 'msg': error_code[404]})
        except Exception as e:
            logging.exception(e)
            return jsonify({'code': 100, 'msg': error_code[100]})

